home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / prog_c / cuj0696.zip / DWYER.ZIP / SERIAL.TST / SRLCHISQ.C < prev    next >
C/C++ Source or Header  |  1996-03-21  |  2KB  |  65 lines

  1. /* ============ */
  2. /* srlchisq.c    */
  3. /* ============ */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <memory.h>
  7. #include <miscdefs.h>
  8. #include <serldefs.h>
  9. #include <assert.h>
  10.  
  11. extern    UINT    WorkArea[];
  12. /* ================================================================= */
  13. /* CalcSerialChiSq - Calculates Chi-Square Statistic for Serial Test */
  14. /* ================================================================= */
  15. void
  16. CalcSerialChiSq(SERIAL_DATA_STRU  *SerialData)
  17. {
  18.     long    k;
  19.     double  SumSq = 0;
  20.  
  21.     memset(WorkArea, 0, sizeof(UINT) * SerialData->NumCategories);
  22.  
  23.     for (k = 0; k < SerialData->UserNumPairs; ++k)
  24.     {
  25.     int    x, y;
  26.     long    p;
  27.  
  28.     /* ---------------- */
  29.     /* Next Observation */
  30.     /* ---------------- */
  31.     x = SerialData->RandFun() % SerialData->SetSize;
  32.     y = SerialData->RandFun() % SerialData->SetSize;
  33.  
  34.     p = x * SerialData->SetSize + y;
  35.     assert(p < (long)SerialData->NumCategories);
  36.     ++WorkArea[p];
  37.     }
  38.  
  39.     /* ------------------------ */
  40.     /* Accumulate Variate Count */
  41.     /* ------------------------ */
  42.     SerialData->TotNumGen += 2 * SerialData->UserNumPairs;
  43.  
  44.     /* -------------------------------------- */
  45.     /* Calculate Sum of Squares of Categories */
  46.     /* -------------------------------------- */
  47.     for (k = 0; k < SerialData->NumCategories; ++k)
  48.     {
  49.     SumSq += SQR((double)WorkArea[k]);
  50.     }
  51.  
  52.     /* ------------------------------ */
  53.     /* Calculate Chi-Square Statistic */
  54.     /* ------------------------------ */
  55.     {
  56.     double    Coef;
  57.  
  58.     Coef = (double)SerialData->NumCategories /
  59.             (double)SerialData->UserNumPairs;
  60.  
  61.     SerialData->SerialChiSq =
  62.         Coef * SumSq - (double)SerialData->UserNumPairs;
  63.     }
  64. }
  65.